#include<iostream>
#include <stdexcept> // 用于抛出异常

using namespace std;
#define MaxSize 5
template<typename T>

// typedef 
struct List
{
    T data[MaxSize];
    int length;

    int InitList(List &L){
        L.length=0;
        return L.length;
    }

    int Length(List &L){
        return L.length;
    }

    int LocateElem(List &L,T &e){
        for (int i = 0; i < L.length; i++){
            if (L.data[i]==e){
                return i+1;
            }
        } 
        return 0;
    }
    //0 1 2 3
    //1 2 3 4
    bool ListInsert(List &L,int i,T e){
        if(i<0||i>L.length+1){   //判断i的范围是否有效
            return false;
        }
        if(L.length>=MaxSize){   //当前存储空间已满，不能插入
            return false;
        }
        for (int j = L.length; j >= i; j--){ //将第i个元素及之后的元素后移
            L.data[j]=L.data[j-1];
        }
        L.data[i-1]=e;           //在第i个位置放入e
        L.length++;              //线性表长度加1
        return true;
        
    }

    bool ListDelete(List &L,int i,T &e){
        if(i<1||i>L.length){
            throw out_of_range("Index out of range");
        }
        e=L.data[i-1];
        for (int j =i; j <L.length; j++)
        {
            cout << "L.ListDelete(L,1,get)" << endl;
            L.data[j-1]=L.data[j];
        }
        L.length--;
        return true;
        
    }

    T GetElem(List &L,int i){
        if(i<1 || i>L.length){
            throw out_of_range("Index out of range");
        }
        return L.data[i-1];
    }


};
int main(){
    List<int> L;
    L.InitList(L);
    cout << L.ListInsert(L,1,1) << endl;
    cout << L.ListInsert(L,2,2) << endl;
    cout << L.GetElem(L,2) << endl;
    int i=1;
    cout << L.LocateElem(L,i) << endl;
    // int get;
    // cout << L.ListDelete(L,2,get) << endl;
        // cout << L.ListDelete(L,1,get) << endl;


    // cout << L.ListInsert(L,3,0) << endl;
    // cout << L.ListInsert(L,4,0) << endl;
    // cout << L.ListInsert(L,5,0) << endl;
    // cout << L.length+1 << endl;
    // cout << L.ListInsert(L,6,0) << endl;
    return 0;
}
